﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crosland.Automotriz.Entidad;
using System.Data.SqlClient;

namespace Crosland.Automotriz.Data.Dao.Linq
{
    public class clsTH_Venta_ExternaDAO
    {
        private readonly DM_CROSLAND_20130417Entities ContextoDeObjs = new DM_CROSLAND_20130417Entities();

        public List<TD_VEHICULO> Listar_x_NROVIN(int ID_ORG_VTA,string ID_USUARIO,String NRO_RUEDAS, string NRO_VIN)
        {
            var p = new object[] {  new SqlParameter("@ID_ORG_VTA",ID_ORG_VTA),
                                    new SqlParameter("@ID_USUARIO", ID_USUARIO), 
                                    new SqlParameter("@NRO_RUEDAS",NRO_RUEDAS),
                                   new SqlParameter("@NRO_VIN", NRO_VIN),
                                 
            };
            var resultado = ContextoDeObjs.ExecuteStoreQuery<TD_VEHICULO>("exec USP_Vehiculo_Datos_x_Usuario @ID_ORG_VTA,@ID_USUARIO,@NRO_RUEDAS,@NRO_VIN", p).AsQueryable().ToList();
            return resultado;
        }

        public List<TD_VEHICULO> Listar_x_ANIO_MES(string ID_USUARIO, int anio, int mes)
        {
            var p = new object[] { new SqlParameter("@ID_USUARIO", ID_USUARIO), new SqlParameter("@AÑO", anio), new SqlParameter("@MES", mes) };
            var resultado = ContextoDeObjs.ExecuteStoreQuery<TD_VEHICULO>("exec USP_Vehiculo_Datos_x_Usuario_x_Anio_Mes @ID_USUARIO,@AÑO,@MES", p).AsQueryable().ToList();
            return resultado;
        }

        public List<TD_VEHICULO> ListarVehiculoxVIN(int ID_ORG_VTA,string NRO_VIN)
        {
            var p = new object[] { new SqlParameter("@ID_ORG_VTA", ID_ORG_VTA), new SqlParameter("@NRO_VIN", NRO_VIN) };
            var resultado = ContextoDeObjs.ExecuteStoreQuery<TD_VEHICULO>("exec USP_Vehiculo_DatosxVIN @ID_ORG_VTA,@NRO_VIN", p).AsQueryable().ToList();
            return resultado;
        }

        public List<TH_Venta_Externa_Result> ListarVenta(String ANIO_MES_INI,String ANIO_MES_FIN,string ID_USUARIO)
        {
            var p = new object[] { new SqlParameter("@ANIO_MES_INI", ANIO_MES_INI), new SqlParameter("@ANIO_MES_FIN",ANIO_MES_FIN), new SqlParameter("@ID_USUARIO", ID_USUARIO) };
            var resultado = ContextoDeObjs.ExecuteStoreQuery<TH_Venta_Externa_Result>("exec USP_TH_VENTA_EXTERNA_LISTAR @ANIO_MES_INI,@ANIO_MES_FIN,@ID_USUARIO", p).AsQueryable().ToList();
            return resultado;
        }

        public List<TH_Venta_Externa_Result> ListarVentaxEstado(int ANIO, int MES, int ID_GENERAL_DET, int ID_VENDEDOR)
        {
            var p = new object[] { new SqlParameter("@ANIO", ANIO), new SqlParameter("@MES", MES), new SqlParameter("@ID_GENERAL_DET", ID_GENERAL_DET), new SqlParameter("@ID_VENDEDOR", ID_VENDEDOR) };
            var resultado = ContextoDeObjs.ExecuteStoreQuery<TH_Venta_Externa_Result>("exec USP_TH_VENTA_EXTERNA_LISTAR_x_ESTADO @ANIO,@MES,@ID_GENERAL_DET,@ID_VENDEDOR", p).AsQueryable().ToList();
            return resultado;
        }

        public List<TH_Venta_Externa_Result> Seleccionar(int ID_VENTA_EXTERNA)
        {
            var p = new object[] { new SqlParameter("@ID_VENTA_EXTERNA", ID_VENTA_EXTERNA) };
            var resultado = ContextoDeObjs.ExecuteStoreQuery<TH_Venta_Externa_Result>("exec USP_TH_VENTA_EXTERNA_SELECCIONAR @ID_VENTA_EXTERNA", p).AsQueryable().ToList();
            return resultado;
        }

        public int ActualizarPendienteDeAprobar(int ID_VENTA_EXTERNA, string ID_USUARIO_SOLICITUD)
        {
            using (DM_CROSLAND_20130417Entities ctx = new DM_CROSLAND_20130417Entities())
            {
                var stud = (from s in ctx.TH_VENTA_EXTERNA
                            where s.ID_VENTA_EXTERNA == ID_VENTA_EXTERNA
                            select s).FirstOrDefault();

                stud.FEC_SOLICITUD = DateTime.Now;
                stud.ID_VENTA_EXTERNA = ID_VENTA_EXTERNA;
                stud.ID_USUARIO_SOLICITUD = ID_USUARIO_SOLICITUD;
                stud.ID_ESTADO = 41;//Pendiente de Aprobar

                int num = ctx.SaveChanges();
                return num;
            }
        }

        public int ActualizarAprobado(int ID_VENTA_EXTERNA, string ID_USUARIO_APRUEBA)
        {
            using (DM_CROSLAND_20130417Entities ctx = new DM_CROSLAND_20130417Entities())
            {
                var stud = (from s in ctx.TH_VENTA_EXTERNA
                            where s.ID_VENTA_EXTERNA == ID_VENTA_EXTERNA
                            select s).FirstOrDefault();

                stud.FEC_APROBACION = DateTime.Now;
                stud.ID_VENTA_EXTERNA = ID_VENTA_EXTERNA;
                stud.ID_USUARIO_APROBACION = ID_USUARIO_APRUEBA;
                stud.ID_ESTADO = 42;//Aprobado

                int num = ctx.SaveChanges();
                return num;
            }
        }

        public int ActualizarRechazado(int ID_VENTA_EXTERNA, string ID_USUARIO_APRUEBA)
        {
            using (DM_CROSLAND_20130417Entities ctx = new DM_CROSLAND_20130417Entities())
            {
                var stud = (from s in ctx.TH_VENTA_EXTERNA
                            where s.ID_VENTA_EXTERNA == ID_VENTA_EXTERNA
                            select s).FirstOrDefault();

                stud.FEC_APROBACION = DateTime.Now;
                stud.ID_VENTA_EXTERNA = ID_VENTA_EXTERNA;
                stud.ID_USUARIO_APROBACION = ID_USUARIO_APRUEBA;
                stud.ID_ESTADO = 43;//Rechazado

                int num = ctx.SaveChanges();
                return num;
            }
        }

        public bool Insertar(TH_VENTA_EXTERNA Obj)
        {
            try
            {
                ContextoDeObjs.AddObject("TH_VENTA_EXTERNA", Obj);
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }

        public int UltimoID()
        {
            int max = 0;

            try
            {
                max = ContextoDeObjs.TH_VENTA_EXTERNA.Select(x => x.ID_VENTA_EXTERNA).Max();
            }
            catch (Exception)
            {
                return max;
            }

            return max;

        }


        public IEnumerable<Object> ListaTipoRuedas() {

            try
            {
                IEnumerable<Object> lista = new List<Object>();
                var q = (from c in ContextoDeObjs.TD_MODELO
                        where c.TIP_NUM_RUEDA != "NN"
                        select new { c.TIP_NUM_RUEDA}).Distinct();

                lista = q.OrderBy(x=>x.TIP_NUM_RUEDA).ToList();


                return lista;
            }
            catch (Exception)
            {
                
                throw;
            }
        }


    }
}
